using System;
using System.Collections.Generic;
using Icbf.EXTUD.Entity;
using Microsoft.Practices.EnterpriseLibrary.Data;
using System.Data.Common;
using System.Data;
using UD.Utilities.Exceptions;


namespace UD.EXTUD.DataAccess
{
    public class ConvenioDAL : GeneralDAL
    {
        public ConvenioDAL()
        {
        }
        public int InsertarConvenio(Convenio pConvenio)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_EXTUD_Convenio_Insertar"))
                {
                    int vResultado;
                    vDataBase.AddOutParameter(vDbCommand, "@IdConvenio", DbType.Int32, 18);

                    vDataBase.AddInParameter(vDbCommand, "@NombreConvenio", DbType.String, pConvenio.NombreConvenio);

                    vDataBase.AddInParameter(vDbCommand, "@EstadoConvenio", DbType.String, pConvenio.EstadoConvenio);

                    vDataBase.AddInParameter(vDbCommand, "@Contratante", DbType.String, pConvenio.Contratante);

                    vDataBase.AddInParameter(vDbCommand, "@ObjetoConvenio", DbType.String, pConvenio.ObjetoConvenio);

                    vDataBase.AddInParameter(vDbCommand, "@DuracionConvenio", DbType.Int32, pConvenio.DuracionConvenio);

                    vDataBase.AddInParameter(vDbCommand, "@ValorConvenio", DbType.Decimal, pConvenio.ValorConvenio);

                    vDataBase.AddInParameter(vDbCommand, "@UsuarioCrea", DbType.String, pConvenio.UsuarioCrea);

                    vResultado = vDataBase.ExecuteNonQuery(vDbCommand);

                    pConvenio.IdConvenio = Convert.ToInt32(vDataBase.GetParameterValue(vDbCommand, "@IdConvenio").ToString());

                    GenerarLogAuditoria(pConvenio, vDbCommand);
                    
                    return vResultado;
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                 throw new GenericException(ex);
            }
        }


        public List<Convenio> ConsultarConvenios(String pNombreConvenio, String pEstadoConvenio, String pContratante, int? pDuracionConvenio)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_EXTUD_Convenios_Consultar"))

                {
                    
                    if (pNombreConvenio != null)
                        vDataBase.AddInParameter(vDbCommand, "@NombreConvenio", DbType.String, pNombreConvenio);
                    if (pEstadoConvenio != null)
                        vDataBase.AddInParameter(vDbCommand, "@EstadoConvenio", DbType.String, pEstadoConvenio);
                    if (pContratante != null)
                        vDataBase.AddInParameter(vDbCommand, "@Contratante", DbType.String, pContratante);
                    if (pDuracionConvenio != null)
                        vDataBase.AddInParameter(vDbCommand, "@DuracionConvenio", DbType.Int32, pDuracionConvenio);
                   
                    using (IDataReader vDataReaderResults = vDataBase.ExecuteReader(vDbCommand))
                    {
                        List<Convenio> vListaConvenio = new List<Convenio>();
                        while (vDataReaderResults.Read())
                        {
                            Convenio vConvenio = new Convenio();
                            vConvenio.IdConvenio = vDataReaderResults["IdConvenio"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["IdConvenio"].ToString()) : vConvenio.IdConvenio;

                            vConvenio.NombreConvenio = vDataReaderResults["NombreConvenio"] != DBNull.Value ? Convert.ToString(vDataReaderResults["NombreConvenio"].ToString()) : vConvenio.NombreConvenio;
                            vConvenio.EstadoConvenio = vDataReaderResults["EstadoConvenio"] != DBNull.Value ? Convert.ToString(vDataReaderResults["EstadoConvenio"].ToString()) : vConvenio.EstadoConvenio;
                            vConvenio.Contratante = vDataReaderResults["Contratante"] != DBNull.Value ? Convert.ToString(vDataReaderResults["Contratante"].ToString()) : vConvenio.Contratante;
                            vConvenio.ObjetoConvenio = vDataReaderResults["ObjetoConvenio"] != DBNull.Value ? Convert.ToString(vDataReaderResults["ObjetoConvenio"].ToString()) : vConvenio.ObjetoConvenio;

                            vConvenio.DuracionConvenio = vDataReaderResults["DuracionConvenio"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["DuracionConvenio"].ToString()) : vConvenio.DuracionConvenio;

                            vConvenio.ValorConvenio = vDataReaderResults["ValorConvenio"] != DBNull.Value ? Convert.ToDecimal(vDataReaderResults["ValorConvenio"].ToString()) : vConvenio.ValorConvenio;
                            vConvenio.UsuarioCrea = vDataReaderResults["UsuarioCrea"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioCrea"].ToString()) : vConvenio.UsuarioCrea;
                            vConvenio.FechaCrea = vDataReaderResults["FechaCrea"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaCrea"].ToString()) : vConvenio.FechaCrea;
                            vConvenio.UsuarioModifica = vDataReaderResults["UsuarioModifica"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioModifica"].ToString()) : vConvenio.UsuarioModifica;
                            vConvenio.FechaModifica = vDataReaderResults["FechaModifica"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaModifica"].ToString()) : vConvenio.FechaModifica;
                            vListaConvenio.Add(vConvenio);
                        }
                        return vListaConvenio;
                    }
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new GenericException(ex);
            }
        }

        /*
        public int ModificarCurso(Curso pCurso)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_EXTUD_Curso_Modificar"))
                {
                    int vResultado;
                    vDataBase.AddInParameter(vDbCommand, "@IdCurso", DbType.Int32, pCurso.IdCurso);
                    vDataBase.AddInParameter(vDbCommand, "@IdTipoCurso", DbType.Int32, pCurso.IdTipoCurso);
                    vDataBase.AddInParameter(vDbCommand, "@NombreCurso", DbType.String, pCurso.NombreCurso);
                    vDataBase.AddInParameter(vDbCommand, "@DuracionCurso", DbType.Int32, pCurso.DuracionCurso);
                    vDataBase.AddInParameter(vDbCommand, "@FechaInicioCurso", DbType.DateTime, pCurso.FechaInicioCurso);
                    vDataBase.AddInParameter(vDbCommand, "@FechaFinalizacionCurso", DbType.DateTime, pCurso.FechaFinalizacionCurso);
                    vDataBase.AddInParameter(vDbCommand, "@VersionCurso", DbType.Int32, pCurso.VersionCurso);
                    vDataBase.AddInParameter(vDbCommand, "@CapacidadCurso", DbType.Int32, pCurso.CapacidadCurso);
                    vDataBase.AddInParameter(vDbCommand, "@ValorCurso", DbType.Decimal, pCurso.ValorCurso);
                    vDataBase.AddInParameter(vDbCommand, "@IdProyectoCurricular", DbType.Int32, pCurso.IdProyectoCurricular);
                    vDataBase.AddInParameter(vDbCommand, "@UsuarioModifica", DbType.String, pCurso.UsuarioModifica);
                    vResultado = vDataBase.ExecuteNonQuery(vDbCommand);
                    GenerarLogAuditoria(pCurso, vDbCommand);
                    return vResultado;
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                 throw new GenericException(ex);
            }
        }
        public int EliminarCurso(Curso pCurso)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_EXTUD_Curso_Eliminar"))
                {
                    int vResultado;
                    vDataBase.AddInParameter(vDbCommand, "@IdCurso", DbType.Int32, pCurso.IdCurso);
                    vResultado = vDataBase.ExecuteNonQuery(vDbCommand);
                    GenerarLogAuditoria(pCurso, vDbCommand);
                    return vResultado;
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                 throw new GenericException(ex);
            }
        }


        public Curso ConsultarCurso(int pIdCurso)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_EXTUD_Curso_Consultar"))
                {
                    vDataBase.AddInParameter(vDbCommand, "@IdCurso", DbType.Int32, pIdCurso);
                    using (IDataReader vDataReaderResults = vDataBase.ExecuteReader(vDbCommand))
                    {
                        Curso vCurso = new Curso();
                        while (vDataReaderResults.Read())
                        {
                            vCurso.IdCurso = vDataReaderResults["IdCurso"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["IdCurso"].ToString()) : vCurso.IdCurso;
                            vCurso.IdTipoCurso = vDataReaderResults["IdTipoCurso"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["IdTipoCurso"].ToString()) : vCurso.IdTipoCurso;
                            vCurso.NombreCurso = vDataReaderResults["NombreCurso"] != DBNull.Value ? Convert.ToString(vDataReaderResults["NombreCurso"].ToString()) : vCurso.NombreCurso;
                            vCurso.DuracionCurso = vDataReaderResults["DuracionCurso"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["DuracionCurso"].ToString()) : vCurso.DuracionCurso;
                            vCurso.FechaInicioCurso = vDataReaderResults["FechaInicioCurso"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaInicioCurso"].ToString()) : vCurso.FechaInicioCurso;
                            vCurso.FechaFinalizacionCurso = vDataReaderResults["FechaFinalizacionCurso"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaFinalizacionCurso"].ToString()) : vCurso.FechaFinalizacionCurso;
                            vCurso.VersionCurso = vDataReaderResults["VersionCurso"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["VersionCurso"].ToString()) : vCurso.VersionCurso;
                            vCurso.CapacidadCurso = vDataReaderResults["CapacidadCurso"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["CapacidadCurso"].ToString()) : vCurso.CapacidadCurso;
                            vCurso.ValorCurso = vDataReaderResults["ValorCurso"] != DBNull.Value ? Convert.ToDecimal(vDataReaderResults["ValorCurso"].ToString()) : vCurso.ValorCurso;
                            vCurso.IdProyectoCurricular = vDataReaderResults["IdProyectoCurricular"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["IdProyectoCurricular"].ToString()) : vCurso.IdProyectoCurricular;
                            vCurso.UsuarioCrea = vDataReaderResults["UsuarioCrea"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioCrea"].ToString()) : vCurso.UsuarioCrea;
                            vCurso.FechaCrea = vDataReaderResults["FechaCrea"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaCrea"].ToString()) : vCurso.FechaCrea;
                            vCurso.UsuarioModifica = vDataReaderResults["UsuarioModifica"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioModifica"].ToString()) : vCurso.UsuarioModifica;
                            vCurso.FechaModifica = vDataReaderResults["FechaModifica"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaModifica"].ToString()) : vCurso.FechaModifica;
                        }
                        return vCurso;
                    }
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new GenericException(ex);
            }
        }
        */
    }
}
